From: Jasper St. Pierre Date: Fri, 10 Aug 2012 21:54:33 +0000 (-0300) Subject: messageTray: Correct idleness X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~6143 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8f7192062219e69e53cfb3b63f854c16ce89e370;p=gnome-shell.git messageTray: Correct idleness If the user is already active when the notification pops up, we won't get an idle watcher because there's no transition from active to idle or vice versa. Correct this by initializing the state correctly from XSync. --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 5ba08306a..8b420a6af 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -39,6 +39,8 @@ const NOTIFICATION_ICON_SIZE = 24; // range from the point where it left the tray. const MOUSE_LEFT_ACTOR_THRESHOLD = 20; +const IDLE_TIME = 1000; + const State = { HIDDEN: 0, SHOWING: 1, @@ -1979,9 +1981,9 @@ const MessageTray = new Lang.Class({ _showNotification: function(notification) { this._notification = notification; - this._userActiveWhileNotificationShown = false; - this._idleMonitorWatchId = this.idleMonitor.add_watch(1000, - Lang.bind(this, this._onIdleMonitorWatch)); + this._userActiveWhileNotificationShown = this.idleMonitor.get_idletime() <= IDLE_TIME; + this._idleMonitorWatchId = this.idleMonitor.add_watch(IDLE_TIME, + Lang.bind(this, this._onIdleMonitorWatch)); this._notificationClickedId = this._notification.connect('done-displaying', Lang.bind(this, this._escapeTray)); this._notificationBin.child = this._notification.actor; diff --git a/src/shell-idle-monitor.c b/src/shell-idle-monitor.c index 592f4772c..5bdb6ba2c 100644 --- a/src/shell-idle-monitor.c +++ b/src/shell-idle-monitor.c @@ -416,3 +416,14 @@ shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor, g_hash_table_remove (monitor->priv->watches, GUINT_TO_POINTER (id)); } + +gint64 +shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor) +{ + XSyncValue value; + + if (!XSyncQueryCounter (monitor->priv->display, monitor->priv->counter, &value)) + return FALSE; + + return _xsyncvalue_to_int64 (value); +} diff --git a/src/shell-idle-monitor.h b/src/shell-idle-monitor.h index 2fcd0820b..6a620827f 100644 --- a/src/shell-idle-monitor.h +++ b/src/shell-idle-monitor.h @@ -67,6 +67,8 @@ guint shell_idle_monitor_add_watch (ShellIdleMonitor *mo void shell_idle_monitor_remove_watch (ShellIdleMonitor *monitor, guint id); +gint64 shell_idle_monitor_get_idletime (ShellIdleMonitor *monitor); + G_END_DECLS #endif /* __SHELL_IDLE_MONITOR_H */